package projeto;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;


/**
 * @author 
 * Classe para manipula��o de arquivos
 *
 */
public class ManipuladorDeArquivo {
	private static final String NOME_DIRETORIO = "Usuarios" + File.separator;
	private static File diretorio;	
	private ObjectInputStream arquivoEntrada;
	private ObjectOutputStream arquivoSaida;
	

	public ManipuladorDeArquivo() {
		ManipuladorDeArquivo.diretorio = new File(NOME_DIRETORIO);		
		
	}
	
	public ManipuladorDeArquivo(String nome){
		ManipuladorDeArquivo.diretorio = new File(NOME_DIRETORIO, nome);
	}
	
	public ObjectInputStream getArquivoEntrada() {
		return arquivoEntrada;
	}

	public void setArquivoEntrada(String nomeArquivoEntrada) {
		try {
			this.arquivoEntrada = new ObjectInputStream(new BufferedInputStream(new FileInputStream(getDiretorio() + nomeArquivoEntrada + ".txt")));
		} catch (IOException e) {
			System.err.println("Erro na configuracao do arquivo de entrada.");
		}
	}

	public ObjectOutputStream getArquivoSaida() {
		return arquivoSaida;
	}
	
	public void setArquivoSaida(String nomeArquivoSaida) {
		try {
			this.arquivoSaida = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(getDiretorio() + nomeArquivoSaida + ".txt")));
		} catch (IOException e) {
			System.err.println("Erro na configuracao do arquivo de saida.");
		}
	}

	public static File getDiretorio() {
		return diretorio;
	}
		
	public static boolean criarDiretorio() {
		return diretorio.mkdir();
	}
	
	public void abrirArquivoEntrada(String nomeArquivoEntrada) {
		try {
			arquivoEntrada = new ObjectInputStream(new BufferedInputStream(new FileInputStream(getDiretorio() + nomeArquivoEntrada + ".txt")));
		} catch (IOException e) {
			System.err.println("Erro ao abrir arquivo.");
		} 				

	}
	
	public void fecharArquivoEntrada() {
		try {
			arquivoEntrada.close();
		} catch (IOException e) {
			System.err.println("Erro na tentativa de fechar o arquivo.");
			System.exit(1);
		}

	}
	
	public void abrirArquivoSaida(String nomeArquivoSaida) {
		try {
			arquivoSaida = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(getDiretorio() + nomeArquivoSaida + ".txt")));
		} catch (IOException e) {
			System.err.println("Erro ao abrir arquivo.");
		}
		
	}
	
	public void fecharArquivoSaida() {
		try {
			arquivoSaida.close();
		} catch (IOException e) {
			System.err.println("Erro na tentativa de fechar o arquivo.");
			System.exit(1);
		}		

	}
	
	public static boolean isDiretorio() {
		return diretorio.exists();		

	}
	
	public static boolean isArquivo(File arquivo) {
		return arquivo.exists();

	}
	

	public void escreverObjetoNoArquivo(ObjectOutputStream arquivo,
			Object objeto) {		
		try {			
			arquivo.writeObject(objeto);
		} catch (IOException e) {
			System.err.println("Nao foi possivel escrever os dados no arquivo.");
			System.exit(1);
		}
		
	}

	public Object lerObjetoDoArquivo(ObjectInputStream arquivo){		
		Object objeto = null;

		try {			
			try {
				objeto = (Object) arquivo.readObject();
			} catch (ClassNotFoundException e) {
				System.err.println("Classe nao foi encontrada.");
				System.exit(1);
			}
		
		} catch (IOException e) {
			System.err.println("Nao foi possivel receber os dados do arquivo.");
			System.exit(1);
		}
		
		return objeto;
	}		

}

